package com.hucsmn.examsystem.common.message;

/**
 * 消息类型。
 */
public enum MessageKind {
    /**
     * 相应正确结果。
     */
    SUCCESS,

    /**
     * 相应错误信息。
     */
    FAIL,

    /**
     * 请求管理员验证登录，获取令牌。
     * <p>
     * 请求：
     * ADMIN_LOGIN(null, User)
     * 回应：
     * SUCCESS(Token, Long)
     * FAIL(null, String)
     */
    ADMIN_LOGIN,

    /**
     * 请求验证登录，获取令牌。
     * <p>
     * 请求：
     * LOGIN(null, User)
     * 回应：
     * SUCCESS(Token, Long)
     * FAIL(null, String)
     */
    LOGIN,

    /**
     * 请求退出登录，释放令牌。
     * <p>
     * 请求：
     * LOGOUT(Token, null)
     * 回应：
     * SUCCESS(null, null)
     * FAIL(null, String)
     */
    LOGOUT,

    /**
     * 修改当前用户。
     * <p>
     * 请求：
     * UPDATE_USER(Token, User)
     * 回应：
     * SUCCESS(null, null)
     * FAIL(null, String)
     */
    UPDATE_SELF,

    /**
     * 开始测试，并获取一份试卷。
     * <p>
     * 请求：
     * BEGIN_EXAM(Token, null)
     * 回应：
     * SUCCESS(null, AnswerSheet)
     * FAIL(null, String)
     */
    BEGIN_EXAM,

    /**
     * 结束测试，并提交一份试卷。
     * <p>
     * 请求：
     * END_EXAM(Token, null)
     * END_EXAM(Token, AnswerSheet)
     * 回应：
     * SUCCESS(null, null)
     * SUCCESS(null, AnswerSheet)
     * FAIL(null, String)
     */
    END_EXAM,

    /**
     * 获取最近一次的测试结果。
     * <p>
     * 请求：
     * RECENT_EXAM(Token, null)
     * 回应：
     * SUCCESS(null, AnswerSheet)
     * FAIL(null, String)
     */
    RECENT_EXAM,

    /**
     * 获取所有的测试结果。
     * <p>
     * 请求：
     * LIST_EXAMS(Token, null)
     * LIST_EXAMS(Token, Integer)
     * LIST_EXAMS(Token, String)
     * 回应：
     * SUCCESS(null, AnswerSheet[])
     * FAIL(null, String)
     */
    LIST_EXAMS,

    /**
     * 获取用户信息。
     * <p>
     * 请求：
     * GET_USER(Token, Integer)
     * GET_USER(Token, String)
     * 回应：
     * SUCCESS(null, User)
     * FAIL(null, String)
     */
    GET_USER,

    /**
     * 增加用户。
     * <p>
     * 请求：
     * ADD_USER(Token, User)
     * 回应：
     * SUCCESS(null, Integer)
     * FAIL(null, String)
     */
    ADD_USER,

    /**
     * 修改用户。
     * <p>
     * 请求：
     * UPDATE_USER(Token, User)
     * 回应：
     * SUCCESS(null, null)
     * FAIL(null, String)
     */
    UPDATE_USER,

    /**
     * 删除用户。
     * <p>
     * 请求：
     * DELETE_USER(Token, Integer)
     * DELETE_USER(Token, String)
     * 回应：
     * SUCCESS(null, null)
     * FAIL(null, String)
     */
    DELETE_USER,

    /**
     * 列举所有用户。
     * <p>
     * 请求：
     * LIST_USERS(Token, null)
     * 回应：
     * SUCCESS(null, User[])
     * FAIL(null, String)
     */
    LIST_USERS,

    /**
     * 查找题库。
     * <p>
     * 请求：
     * GET_PROBLEM(Token, Integer)
     * 回应：
     * SUCCESS(null, Problem)
     * FAIL(null, String)
     */
    GET_PROBLEM,

    /**
     * 增加题目。
     * <p>
     * 请求：
     * ADD_PROBLEM(Token, Problem)
     * 回应：
     * SUCCESS(null, Integer)
     * FAIL(null, String)
     */
    ADD_PROBLEM,

    /**
     * 修改题目。
     * <p>
     * 请求：
     * UPDATE_PROBLEM(Token, Problem)
     * 回应：
     * SUCCESS(null, null)
     * FAIL(null, String)
     */
    UPDATE_PROBLEM,

    /**
     * 删除题目。
     * <p>
     * 请求：
     * DELETE_PROBLEM(Token, Integer)
     * 回应：
     * SUCCESS(null, null)
     * FAIL(null, String)
     */
    DELETE_PROBLEM,

    /**
     * 列举所有题目。
     * <p>
     * 请求：
     * LIST_PROBLEMS(Token, null)
     * 回应：
     * SUCCESS(null, Problem[])
     * FAIL(null, String)
     */
    LIST_PROBLEMS;

    public boolean isRequest() {
        return ordinal() > FAIL.ordinal();
    }
}